#ifndef DEPENDANCES_H
#   define DEPENDANCES_H


#include "tab_dyn_id.h"



/**
 * \struct dependance dependances.h
 * Une telle structure contient, pour une region donnee, la liste des id
 * des regions qui doivent avoir ete terminees pour y avoir acces.
 */
struct dependance
{
    /** l'id de la region concernee */
    unsigned int id_region;
    /** la liste des id des regions a terminer */
    struct tab_dyn_id tab_id;
};



/**
 * \struct tab_dependances dependances.h
 * Cette structure est un tableau dynamique contenant des dependances.\n
 * Notez que, comme les tableaux de descriptions, sa taille est fixee lors de
 * son initialisation et ne peut ensuite pas etre modifiee.
 */
struct tab_dependances
{
    unsigned int nb_elements;
    struct dependance* tab;
};



/**
 * \fn void init_tab_dependances(struct tab_dependances* tab,
                                 const unsigned int taille)
 * \brief Initialise un tableau de dependances
 *        en lui donnant une certaine taille
 *
 * \param[out] tab L'adresse du tableau a initialiser
 * \param[in] taille La taille que l'on souhaite donner au tableau
 */
void init_tab_dependances(struct tab_dependances* tab,
                          const unsigned int taille);



/**
 * \fn void detruire_tab_dependances(struct tab_dependances* tab)
 * \brief Libere la memoire allouee pour un tableau de dependances
 *
 * \param[in] tab L'adresse du tableau a detruire
 */
void detruire_tab_dependances(struct tab_dependances* tab);



/**
 * \fn void init_dependance(struct tab_dependances* tab,
                            const unsigned int id_region,
                            const unsigned int nb_dependances)
 * \brief Permet d'enregistrer les dependances d'une
 *        nouvelle region dans un tableau de dependances
 *
 * \param[in,out] tab L'adresse du tableau de dependances concerne
 * \param[in] id_region L'id de la region a laquelle on va s'interesser
 * \param[in] nb_dependances Le nombre de regions a finir pour acceder
 *                           a celle a laquelle on va s'interesser
 */
void init_dependance(struct tab_dependances* tab,
                     const unsigned int id_region,
                     const unsigned int nb_dependances);



/**
 * \fn void ajouter_dependance(struct tab_dependances* tab, const unsigned int id_region)
 * \brief Ajoute une dependance a la derniere region ayant
 *        ete ajoutee a un tableau de dependances
 *
 * \param[in,out] tab L'adresse du tableau de dependances concerne
 * \param[in] id_region L'id d'une region a finir pour acceder a la derniere
 *                      region qui a ete ajoutee au tableau de dependances
 */
void ajouter_dependance(struct tab_dependances* tab, const unsigned int id_region);


#endif /* DEPENDANCES_H */
